package com.wn.date20190805;

import java.util.ArrayList;
import java.util.List;

/**
 * 声明一个仓库（Storage）类，属性为大小为10的产品数组 在Storage类中，有如下方法： 入库：参数是产品，将其存入产品数组中，
 * 如果其中无该产品且数组有空间存储，则加到数组中， 存在该产品，则更新其库存 出库：参数是产品名和数量，先查询是否存在该产品， 如果存在：
 * 则判断出库数量是否小于或等于其库存， 符合条件则减少其库存，否则不作操作，仅提示 如果不存在该产品，则不做操作，仅提示 盘点：输出仓库中所有产品的信息
 * 
 * @author song
 *
 */
public class Storage
{
	public List<Product> products = new ArrayList<Product>();

	// public Product[] productsProduct=new Product[10];
	public final int CAPACITY = 10;// 容量为10；

	/**
	 * 入库：参数是产品，将其存入产品数组中 如果其中无该产品且数组有空间存储，则加到数组中， 存在该产品，则更新其库存
	 * 
	 * @param pros
	 */
	public void putIn(Product... pros)
	{
		boolean isNull = false;// 判断参数为空
		// 产品为空
		for (Product pro : pros)
		{
			if (pro == null)
			{
				isNull = true;
				System.out.println("参数未实例化");
				break;
			}
		}

		if (isNull)
		{
			System.out.println("参数未实例化");
		} else
		{
			if (pros.length > 0)
			{
				int inCount = 0;// 入库成功个数
				// 判断库存

				for (Product p : pros)
				{
					// 仓库未满，入庫数量大于0；
					if((products.size() <= CAPACITY)&& p.getStock()>0)
					{
						Product productIn;
						try
						{
							productIn = products.stream().filter(t -> t.getNo() == p.getNo()).findFirst().get();
							productIn.setStock(p.getStock()+productIn.getStock());
						} catch (Exception e)
						{
							// 新建对象，不然会改变原值，
							products.add(new Product(p.getNo(), p.getName() , p.getStock()));
							inCount++;
						}
					}
					else {
						System.out.println("庫存已滿，或者存入数量錯誤");
					}
					
				}

				System.out.println("成功入库，新增" + inCount + "种产品");
			}
		}

	}

	/**
	 * 如果存在：则判断出库数量是否小于或等于其库存， 符合条件则减少其库存， 否则不作操作，仅提示 如果不存在该产品，则不做操作，仅提示
	 * 
	 * @param pname 产品名 String
	 * @param num   产品数量 int
	 */
	public void takeOut(String pname, int num)
	{
		if (pname == null || num == 0)
		{
			System.out.println("参数错误！");
		} else
		{
			Product product;
			// 商品存在
			try
			{
				product= products.stream().filter(t -> t.getName().equals(pname)).findFirst().get();
				// 库存大于取出数量，取出数要大于0
				if (product.getStock() >= num&& num>0)
				{
					// 操作
					product.setStock(product.getStock()-num);
					// 库存为0，清除商品
					if (product.getStock() <= 0)
					{
						products.remove(product);
					}
					System.out.println("取出成功");
				} else
				{
					System.out.println("库存不足，或取出数量为錯誤");
				}
			} catch (Exception e)
			{
				// TODO: handle exception
				System.out.println("仓库没有该商品");
			}
		
		}
	}

	public void checkProducts()
	{
		for (Product p : products)
		{
			System.out.println("商品：" + p.getName() + "，剩余：" + p.getStock());
		}
		System.out.println("仓库盘点完毕");
	}

}
